package com.exchange.websocket.common.pusherapp;

import com.exchange.websocket.common.pusherapp.channel.*;
import com.exchange.websocket.common.pusherapp.connection.Connection;
import com.exchange.websocket.common.pusherapp.connection.ConnectionEventListener;
import com.exchange.websocket.common.pusherapp.connection.ConnectionState;


/**
 * Created by jamiepatel on 09/06/2016.
 */
public interface Client {
    Connection getConnection();
    void connect();
    void connect(final ConnectionEventListener eventListener, ConnectionState... connectionStates);
    void disconnect();
    Channel subscribe(final String channelName);
    Channel subscribe(final String channelName, final ChannelEventListener listener, final String... eventNames);
    PrivateChannel subscribePrivate(final String channelName);
    PrivateChannel subscribePrivate(final String channelName, final PrivateChannelEventListener listener,
                                    final String... eventNames);
    PresenceChannel subscribePresence(final String channelName);
    PresenceChannel subscribePresence(final String channelName, final PresenceChannelEventListener listener,
                                      final String... eventNames);
    void unsubscribe(final String channelName);
    Channel getChannel(String channelName);
    PrivateChannel getPrivateChannel(String channelName);
    PresenceChannel getPresenceChannel(String channelName);
}
